#funo para lidar com amostras de tamanhos diferentes
#repete a estatstica de interesse (ANOVA ou Mann-Whitney)
amostral<-function(x,cat,cat1,cat2,var,tam,log10=TRUE,ciclos=1000) #x=dataframe cat=nome da varivel categrica cat1=nome da categoria de menor n cat2=nome da categoria de maior n var=varivel a ser testada tam= igual ao n da cat2 log10=true para transformar dados em log10 ciclos=quantas vezes repete o ciclo na funo for
{         
  dados<-x #salva dataframe em objeto dados
  if(log10==TRUE) #transforma os dados em seus log decimais
  {
     dados[,2]<-log10(dados[,2]) #s os dados da varivel numrica
  }                            
  else #os dados j esto em log decimal
  {
    dados<-dados
  }
  variancia<-bartlett.test(x[,2],x[,1]) #clculo da equivalncia de varincia
  p.variancia<-variancia$p.value #salvando s o valor de p do teste de varincia
  
  dados.cat1<-subset(dados,dados[,1]==cat1) #separando s os dados da categoria 1
  dados.cat2<-subset(dados,dados[,1]==cat2) #separando s os dados da categoria 2
  rep.cat1<-rep(cat1,tam) #cria um novo vetor para cat1 com o tamanho que a amostra vai ter
  resulta<-rep(NA,ciclos) #cria vetor com 1000 NAs que ser preenchido na funo for
                        #pelos valores de p dos testes

  if(p.variancia>=0.05) #p>=0.05 a funo segue realizando ANOVA
  {
    for(i in 1:ciclos) #para repetir ciclos vezes as linhas de comando
    { 
      s.cat1<-sample(dados.cat1[,2],tam,replace=TRUE) #aplicando sample para cat1 e gerando objeto com comprimento igual ao da cat2
      dados.cat1<-data.frame(rep.cat1,s.cat1) #transforma esse sample em um dataframe
      colnames(dados.cat1)[1]<-cat #nomeando coluna 1 
      colnames(dados.cat1)[2]<-var #noemando coluna 2
      dados<-rbind(dados.cat1,dados.cat2) #construindo dataframe para ANOVAs.
      
      lmanova<-lm(dados[,2]~dados[,1],dados) #modelo para realizar anova
      anova<-anova(lmanova) #fazendo anova com as amostras com mesmo tamanho
      
      resulta[i]<-anova$Pr[1] #preenche objeto resulta com os p gerados na ANOVA
    }
    histograma<-hist(resulta,xlab="p valor ANOVA",ylab="Frequncia")#histograma com as frequncias dos p
    return(resulta) #retorna para o usurio
  }
  else #se o p<=0.05 no teste de varincia
  {
    for(i in 1:ciclos) #para repetir ciclos vezes as linhas de comando
    {
      s.cat1<-sample(dados.cat1[,2],tam,replace=TRUE) #aplicando sample para cat1 e gerando objeto com comprimento igual ao da cat2
      dados.cat1<-data.frame(rep.cat1,s.cat1) #transforma esse sample em um dataframe
      colnames(dados.cat1)[1]<-cat #nomeando coluna 1 
      colnames(dados.cat1)[2]<-var #noemando coluna 2
      dados<-rbind(dados.cat1,dados.cat2) #construindo dataframe para Mann-Whitney-Wilcox
      
      mann<-wilcox.test(dados[,2]~dados[,1]) #teste de Mann-Whitney-Wilcox
      
      resulta[i]<-mann$p.value #preenche objeto resulta com os p gerados no Mann-Whitney
    }
  }
  histograma<-hist(resulta,xlab="p valor Mann-Whitney",ylab="Frequncia") #histogtama com as frequncias dos p
  return(resulta) #retorna para o usurio
} 